package com.cskaoyan;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.sql.Connection;

/**
 * 创建日期: 2022/11/22 16:03
 *
 * @author ciggar
 */
public class MybatisMain {

    public static void main(String[] args) throws IOException {

        // 1. 创建SqlSessionFactoryBuilder
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();

        // 2. 构建SQLSessionFactory
        // 这个类是Mybatis实例的核心对象，叫做 SqlSession工厂
        // SQLSession就是之前JDBC应用中的（Connection） 连接对象
//        SqlSessionFactory sqlSessionFactory = builder.build(new FileInputStream("src/main/resources/mybatis-config.xml"));


        // Mybatis官方推荐的读取配置文件的方式
        // 这种方式底层其实就是利用类加载器读取配置文件，是推荐的
        // InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
        // SqlSessionFactory sqlSessionFactory = builder.build(in);

        // 自己利用类加载器去读取文件
        ClassLoader classLoader = MybatisMain.class.getClassLoader();
        InputStream in = classLoader.getResourceAsStream("mybatis-config.xml");

        URL url = classLoader.getResource("mybatis-config.xml");
        String path = url.getPath();
        System.out.println("path:" + path);
        FileInputStream inputStream = new FileInputStream(path);

        SqlSessionFactory sqlSessionFactory = builder.build(inputStream);


        // 3. 通过SQLSessionFactory获取 SQLSession
        // 参数true表示 自动提交，默认不会自动提交事务
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        // Connection connection = sqlSession.getConnection();

        // 4. 通过SqlSession对象执行对应的SQL语句
        int affectedRows = sqlSession.update("cskaoyan.delete",1003);

        // 5. 打印
        System.out.println("affectedRows:" + affectedRows);


        // 6. 关闭连接
        // sqlSession.commit();
        sqlSession.close();


    }
}
